37
class Solution {
    boolean[][] row = new boolean[9][9];
    boolean[][] col = new boolean[9][9];
    boolean[][][] grop = new boolean[3][3][9];

    public void solveSudoku(char[][] board) {
        init(board);
        fun(board, 0, 0);
    }

    public boolean fun(char[][] board, int x, int y) {
        if (x == 9) {
            return true;
        }
        if (board[x][y] != '.') {
            return fun(board, x+(y+1==9  1  0), y+1==9  0  y+1);
        }
        for (int i = 1; i = 9; i++) {
            if (check(x, y, i)) {
                row[x][i-1] = col[y][i-1] = grop[x3][y3][i-1] = true;
                board[x][y] = (char)(i+'0');
                if (fun(board, x+(y+1==9  1  0), y+1==9  0  y+1)) {
                    return true;
                }
                board[x][y] = '.';
                row[x][i-1] = col[y][i-1] = grop[x3][y3][i-1] = false;
            }
        }
        return false;
    }

    public void init(char[][] board) {
        for (int i = 0; i  9; i++) {
            for (int j = 0; j  9; j++) {
                if (board[i][j] != '.') {
                    int a = board[i][j]-'1';
                    row[i][a] = col[j][a] = grop[i3][j3][a] = true;
                }
            }
        }
    }

    public boolean check(int x, int y, int a) {
        if (row[x][a-1]  col[y][a-1]  grop[x3][y3][a-1]) {
            return false;
        }
        return true;
    }
}
链接：https://ac.nowcoder.com/acm/problem/16422
来源：牛客网

题目描述 
图书馆中每本书都有一个图书编码，可以用于快速检索图书，这个图书编码是一个正整数。

每位借书的读者手中有一个需求码，这个需求码也是一个正整数。如果一本书的图书编码恰好以读者的需求码结尾，那么这本书就是这位读者所需要的。

小 D 刚刚当上图书馆的管理员，她知道图书馆里所有书的图书编码，她请你帮她写一个程序，对于每一位读者，求出他所需要的书中图书编码最小的那本书，如果没有他需要的书，请输出-1。

输入描述:
输入的第一行，包含两个正整数 n 和 q，以一个空格分开，分别代表图书馆里书的数量和读者的数量。
接下来的 n 行，每行包含一个正整数，代表图书馆里某本书的图书编码。
接下来的 q 行，每行包含两个正整数，以一个空格分开，第一个正整数代表图书馆里读者的需求码的长度，第二个正整数代表读者的需求码。
输出描述:
输出有 q 行，每行包含一个整数，如果存在第 i 个读者所需要的书，则在第 i 行输出第 i 个读者所需要的书中图书编码最小的那本书的图书编码，否则输出-1。

import java.util.Scanner;
import java.util.Arrays;


class User{
    int size;
    int cold;
    public User(int size, int cold){
        this.size = (int)Math.pow(10, size);
        this.cold = cold;
    }
    @Override
    public String toString(){
        return size+" "+cold;
    }
}

public class Main{
    public static void main(String args[]){
        Scanner in = new Scanner(System.in);
        
        int[] bookCold = new int[in.nextInt()];
        User[] user = new User[in.nextInt()];
        
        for (int i = 0; i < bookCold.length; i++){
            bookCold[i] = in.nextInt();
        }
        Arrays.parallelSort(bookCold);

        for (int i = 0; i < user.length; i++){
            user[i] = new User(in.nextInt(), in.nextInt());
        }
        
        
        for (int i = 0; i < user.length; i++){
            boolean flog = false;
            for (int j = 0; j < bookCold.length; j++){
                if (bookCold[j] % user[i].size == user[i].cold){
                    System.out.println(bookCold[j]);
                    flog = true;
                    break;
                }
            }
            if (!flog){
                System.out.println(-1);
            }
        }
    }
}